﻿Imports System.Text
Public Class frmEficienciaMunicao
    Inherits formPadrao


    Dim Sep As Char
    Dim Nombre As Double
    Dim dt As New DataTable
    Dim row As DataRow
    Public WithEvents ucPreambulo As New ucPreambulo
    Private nomeDiretorio As String = Nothing
    Public WithEvents btnLimpar As System.Windows.Forms.Button
    Private registro As New registroVO
    Private mensagem As String
    Private erroNivel As Integer = 0
    Private tipoAvaliacao As String
    Private _ehArma As Boolean
    Private _id_natureza As Integer = 81
    Private _id_tipo_pericia = 5
    Private ucFabricanteMunicao As New ucFabricante
    Private ucCalibreMunicao As New ucCalibreSimples

    Public Property getUcPreambulo() As ucPreambulo
        Get
            Return ucPreambulo
        End Get
        Set(ByVal value As ucPreambulo)
            ucPreambulo = value
        End Set
    End Property


    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        pnlDados.Controls.Add(ucPreambulo)
        If Not DesignMode Then
            Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
            pnlDados.AutoSize = True
            pnlItens.AutoSize = True
            Me.AutoScroll = True
            pnlFabricanteMunicao.Controls.Add(ucFabricanteMunicao)
            pnlMunicaoCalibre.Controls.Add(ucCalibreMunicao)
        End If
    End Sub


    Private Sub frmEficiencia_Load(sender As Object, e As EventArgs) Handles Me.Load

        Try
            Me.WindowState = FormWindowState.Maximized
            ucPreambulo.ucPerito.Enabled = True
            ucPreambulo.selecionaIdTipoPericia = _id_tipo_pericia
            ucPreambulo.selecionaIdNatureza = _id_natureza
            ucPreambulo.lblTitulo.Text = "EFICIÊNCIA DE MUNIÇÃO"
            ucPreambulo.pnlNatureza.Enabled = False
            ucPreambulo.txtVitima.Text = "A incolumidade pública"

            Me.ControlBox = False
            If generica.gravaBanco Then
                ucPreambulo.btnBuscaLaudo.Enabled = True
            Else
                ucPreambulo.btnBuscaLaudo.Enabled = False
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub TextboxNumeric_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)

        Dim nonNumberEntered As Boolean
        nonNumberEntered = True
        If (e.KeyChar >= Convert.ToChar(48) AndAlso e.KeyChar <= Convert.ToChar(57)) OrElse e.KeyChar = Convert.ToChar(8) OrElse e.KeyChar = Convert.ToChar(44) Then
            nonNumberEntered = False
        End If
        If nonNumberEntered = True Then
            e.Handled = True
        Else
            e.Handled = False
        End If
    End Sub
    '--------------------------------------------------------------------------------------------------------------------------------
    ' FUNÇÃO QUE IRÁ GERAR O LAUDO
    '--------------------------------------------------------------------------------------------------------------------------------
    Private Sub geraLaudo()

        generica.tempo = Now
        Dim oWordTemp As New WordAppl
        Dim registroBo As New registroBO
        Dim regBO As New registroBO

        '-----------------------------------------------------------------------------------------
        ' RETORNO O NOME DO DIRETORIO A SER CRIADO
        '-----------------------------------------------------------------------------------------
        nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                    ucPreambulo.getNumeroLaudo, "EFICIENCIA MUNICAO " & tipoAvaliacao, ucPreambulo.getIndiciado, ucPreambulo.getVitima)
        '-----------------------------------------------------------------------------------------
        ' ABRE O ARQUIVO WORD
        '-----------------------------------------------------------------------------------------

        If registroGlobal.registroPincipal.ID_REGISTRO > 0 Or ucPreambulo.ehNovo Then

            pb.zeraContador()
            pb.stepBarra(10)
            pb.Visible = True
            pb.stepBarra(10)
            '-----------------------------------------------------------------------------------------
            ' GRAVA REGISTRO NA BASE DE DADOS
            '-----------------------------------------------------------------------------------------
            pb.stepBarra(10)
            Try

                If generica.gravaBanco Then

                    '------------------------------------------------------------------------------------
                    ' VERFICA SE É UM NOVO REGISTRO OU SE É UM REGISTRO JÁ ARMAZENADO NA BASE DE DADOS
                    '------------------------------------------------------------------------------------
                    pb.stepBarra(10)

                    Dim provas As New StringBuilder
                    Dim textoProva As String = String.Empty

                    If cmbInvolucro.Text.Equals("invólucro de segurança") Then
                        textoProva = cmbInvolucro.Text & txtInvolucroIC.Text
                    Else
                        textoProva = cmbInvolucro.Text
                    End If

                        pb.stepBarra(10)

                        Dim registroGravado As Integer


                        If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO = False Then
                        '-----------------------------------------------------------------------------------------
                            ' RETORNO O NOME DO DIRETORIO A SER CRIADO
                            '-----------------------------------------------------------------------------------------
                            nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                       ucPreambulo.getNumeroLaudo, "EFICIENCIA DE MUNICAO" & tipoAvaliacao, ucPreambulo.getIndiciado, ucPreambulo.getVitima)

                            registroGravado = regBO.updateRegistro(registroGlobal.registroPincipal, _
                                                                   textoProva, ucPreambulo.getIdPeritoSelecionado, _
                                                                   nomeDiretorio, ucPreambulo)
                            pb.stepBarra(10)
                            mensagem = (" O laudo n°" & registroGravado & " foi atualizado com sucesso na base de dados. Clique no ícone do WORD para visualizar o laudo.")
                            registroGlobal.registroPincipal = registroBo.getRegistroSimplificado(registroGravado, ucPreambulo.getAno)
                        Else

                            Dim reg As New registroVO
                            Dim ultimo As Integer = regBO.getUltimoRegistro
                            Dim registroTemporario As Integer = 0
                            If ultimo <> ucPreambulo.getNumeroLaudo Then
                                registroTemporario = ucPreambulo.getNumeroLaudo
                                ucPreambulo.getNumeroLaudo = ultimo
                            End If
                            '-----------------------------------------------------------------------------------------
                            ' RETORNO O NOME DO DIRETORIO A SER CRIADO
                            '-----------------------------------------------------------------------------------------
                            nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                       ucPreambulo.getNumeroLaudo, "EFICIENCIA DE MUNICAO" & tipoAvaliacao, ucPreambulo.getIndiciado, ucPreambulo.getVitima)

                            reg = generica.populaRegistro(ucPreambulo, generica.retornaNomeArquivoCompleto(nomeDiretorio & ".doc", nomeDiretorio), textoProva)
                            registroGravado = regBO.insereRegistro(reg)
                            registroGlobal.registroPincipal = registroBo.getRegistroSimplificado(registroGravado, ucPreambulo.getAno)
                            If registroTemporario = 0 Then
                                mensagem = (" O laudo n°" & registroGlobal.registroPincipal.NUM_REGISTRO & " foi inserido com sucesso na base de dados. Clique no ícone do WORD para visualizar o laudo.")
                            Else
                                mensagem = (" O laudo n°" & ultimo & " foi inserido com sucesso na base de dados. O laudo não foi gravado com o número inicial " & registroTemporario & " pelo fato de outro usuário ter inserido este número de laudo no banco de dados. Clique no ícone do WORD para visualizar o laudo.")
                            End If
                            pb.stepBarra(10)
                        End If
                        '------------------------------------------------------------------------------------
                        ' INSERE DADOS NA TABELA PONTUACAO
                        '------------------------------------------------------------------------------------
                        Dim pontuacaobo As New pontuacaoBO
                        Dim pontuacao As New pontuacaoVO
                        Dim i As Integer

                        If ucPreambulo.ehNovo Then
                            With pontuacao
                                .USUARIO = New usuarioVO With {.ID_USUARIO = ucPreambulo.getIdPeritoSelecionado}
                                .REGISTRO = New registroVO With {.ID_REGISTRO = registroGlobal.registroPincipal.ID_REGISTRO}
                                .PONTUACAO = registroGlobal.registroPincipal.NATUREZA.PONTOS_ATENDIMENTO
                                .TIPO_OCORRENCIA = "ATENDIMENTO"
                                .DATA_ALTERACAO = Now
                            End With
                            i = pontuacaobo.inserePontuacao(pontuacao)
                        Else
                            i = pontuacaobo.upDatePontuacao(ucPreambulo.getIdPeritoSelecionado, registroGlobal.registroPincipal)
                        End If
                    Else
                        mensagem = ("O sistema está configurado para não gravar registros na base de dados do sistema de registro eletrônico. Para habilitar, clique em configurações > Configurar aplicação e marque a opção <<SIM>>>. Apenas o laudo de n° " & ucPreambulo.getNumeroLaudo & " será gerado. Clique no ícono do WORD para visualizar o documento.")
                    End If


                    '-------------------------------------------------------------------------------------
                    ' INSERE DADOS ITENS DA TABELA NA BASE LOCAL
                    '-------------------------------------------------------------------------------------
            Catch ex As Exception
                generica.encerraProcessosWord()
                habilita(False, False, False, False)
                generica.gravaErro(ex)
                erroNivel = 1
                Exit Sub
            End Try

            Try

                Dim diretorio As String = System.Configuration.ConfigurationManager.AppSettings("dirTemplateword")
                oWordTemp.OpenModelo("eficienciaMunicoes.dot")
                oWordTemp.SaveAs(nomeDiretorio, nomeDiretorio & ".doc")
                oWordTemp.Quit()
                oWordTemp = Nothing
                '------------------------------------------------------------------------------------------------
                ' CRIA O PREMABULO
                '------------------------------------------------------------------------------------------------
                Dim oWord As New WordAppl
                oWord.Open(nomeDiretorio, nomeDiretorio & ".doc")
                oWord.criaPreambulo(ucPreambulo)
                '------------------------------------------------------------------------------------------------
                ' PREENCHE O CORPO DO DOCUMENTO
                '------------------------------------------------------------------------------------------------

                oWord.insereDadosTabela(gridMunicao, 2)

                If cmbInvolucro.Text.Equals("Todo o material foi consumido durante o exame pericial") Then
                    oWord.FindAndReplacement("<<txtAcondicionamento>>", "Todo o material encaminhado foi consumido durante o exame de eficiência e não segue em anexo a esta peça pericial.")

                Else

                    If cmbInvolucro.Text.Equals("invólucro de segurança") Then
                        oWord.FindAndReplacement("<<txtAcondicionamento>>", "O material encaminhado segue em anexo a esta peça pericial acondicionado em " & cmbInvolucro.Text & " nº " & txtInvolucroIC.Text & ".")
                    Else
                        oWord.FindAndReplacement("<<txtAcondicionamento>>", "O material encaminhado segue em anexo a esta peça pericial acondicionado em " & cmbInvolucro.Text & ".")
                    End If


                End If

                oWord.criaAssinatura(ucPreambulo)
                oWord.Save()
                oWord.Quit()
                oWord = Nothing
                pb.stepBarra(10)
                limpaMunicao()
                limpaCampos()

                '-------------------------------------------------------dim----------------------------------------------------------------
                ' ROTINA PARA TRATAR DO ERRO CASO OCORRA INCONSISTÊNCIA NA BASE DE DADOS
                '-----------------------------------------------------------------------------------------------------------------------

            Catch exc As Exception
                generica.encerraProcessosWord()
                generica.gravaErro(exc)
                erroNivel = 2
                Exit Sub
            End Try


        Else

            '----------------------------------------------------------------------------------------------------------------------------
            ' CASO SEJA UM ARQUIVO QUE JÁ SE ENCONTRA CADASTRADO NA BASE DE DADOS
            '----------------------------------------------------------------------------------------------------------------------------
            If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                habilita(False)
                mensagem = ("O laudo n° " & ucPreambulo.getNumeroLaudo & "/" & ucPreambulo.getAno & " já existe registrado na base de dados.Clique no ícone do WORD para visualizar o laudo.")
            Else
                mensagem = ("O laudo n° " & ucPreambulo.getNumeroLaudo & "/" & ucPreambulo.getAno & " não foi encontrado na base de dados.")
            End If
        End If
        MsgBox(mensagem)
    End Sub
    Private Sub habilita(ByVal habilita As Boolean, _
                         Optional ByVal habilitaBarra As Boolean = Nothing, _
                         Optional ByVal habilitaVerWord As Boolean = Nothing, _
                         Optional ByVal habilitaNatureza As Boolean = False)

        ucPreambulo.btnVerWord.Visible = habilitaVerWord
        ucPreambulo.btnGeraLaudo.Enabled = habilita
        ucPreambulo.habilitaCampos(habilita)
        pnlItens.Enabled = habilita
        ucPreambulo.selecionaIdTipoPericia = _id_natureza
        ucPreambulo.pnlNatureza.Enabled = habilitaNatureza

        ucPreambulo.selecionaIdTipoPericia = _id_tipo_pericia
        ucPreambulo.selecionaIdNatureza = _id_natureza
        pb.Visible = habilitaBarra
        pb.zeraContador()



        If Not IsNothing(habilitaBarra) Then
            pb.Visible = habilitaBarra
            pb.zeraContador()
        End If
    End Sub

    Private Sub btnGerarLaudo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        Dim isOk As Boolean = False
        Try
            If (generica.validaCampos(ucPreambulo)) Then
                geraLaudo()
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try

    End Sub

    Private Sub btnWord_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try
            If registroGlobal.registroPincipal.NUM_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            Else
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            End If


        Catch ex As Exception
            generica.gravaErro(ex)
        End Try

    End Sub

    Private Sub limpaCampos()
        Try
            For Each controle In pnlItens.Controls
                If TypeOf (controle) Is TextBox Then
                    CType(controle, TextBox).Text = String.Empty
                ElseIf TypeOf (controle) Is ComboBox Then
                    CType(controle, ComboBox).SelectedIndex = -1
                End If
            Next

            ucFabricanteMunicao.cmbFabricante.SelectedIndex = 0
            ucCalibreMunicao.cmbCalibre.SelectedIndex = 0
            rdEficienteSim.Checked = True
            txtqtdeMunicao.Value = 1
            pb.Visible = False
            pb.zeraContador()
            cmbInvolucro.SelectedIndex = 0
            txtInvolucroIC.Text = String.Empty
            gridMunicao.Rows.Clear()
            'chkIntacta.Checked = True
            cmbInvolucro.SelectedIndex = 0
            chkIntacta.Checked = True

        
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoLimpaCampos(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickLimpaCampos
        Try
            ucPreambulo.limparCampos()
            limpaCampos()
            ucPreambulo.populaDados()
            habilita(True)
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Function validaCampos() As Boolean
        Dim ok As Boolean = False
        Try
            If txtqtdeMunicao.Value = 0 Then
                erro.SetError(txtqtdeMunicao, "A quantidade informada deve ser maior do que zero.")
                txtqtdeMunicao.Focus()
                Return False
            Else
                erro.SetError(txtqtdeMunicao, String.Empty)
            End If

            If ucFabricanteMunicao.DESCFABRICANTE.ToString.Equals(String.Empty) Then
                erro.SetError(pnlFabricanteMunicao, "Informe o fabricante da munição. Se o mesmo não estiver na lista, digite o nome do fabricante.")
                pnlFabricanteMunicao.Focus()
                Return False
            Else
                erro.SetError(pnlFabricanteMunicao, String.Empty)
            End If

            If ucCalibreMunicao.DESC_CALIBRE.ToString.Equals(String.Empty) Then
                erro.SetError(pnlMunicaoCalibre, "Informe o calibre da munição. Se o mesmo não estiver na lista, digite a descrição do mesmo.")
                pnlMunicaoCalibre.Focus()
                Return False
            Else
                erro.SetError(pnlMunicaoCalibre, String.Empty)
            End If

            'If rdDevolveSim.Checked Then
            '    If cmbDevolucao.SelectedIndex = -1 Then
            '        erro.SetError(cmbDevolucao, "Campo obrigatório")
            '        Return False
            '    Else
            '        erro.SetError(cmbDevolucao, String.Empty)
            '    End If

            'End If

            'If rdDevolveSim.Checked And cmbDevolucao.Text.Equals("invólucro de segurança") Then
            '    If txtInvolucro.Text.Equals(String.Empty) Then
            '        erro.SetError(txtInvolucro, "Campo obrigatório")
            '        Return False
            '    Else
            '        erro.SetError(txtInvolucro, String.Empty)
            '    End If
            'End If
            Return True
        Catch ex As Exception
            Throw ex
        End Try
        Return ok
    End Function
    Private Sub limpaErroControles()
        For Each controle In grpDadosMunicao.Controls
            If TypeOf (controle) Is Panel Then
                erro.SetError(controle, String.Empty)
            End If
            erro.SetError(txtqtdeMunicao, String.Empty)
        Next
    End Sub
    Private Sub chamaEventoGeraLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickGeraLaudo
        Try
            For Each controle In pnlItens.Controls
                erro.SetError(controle, String.Empty)
            Next

            'COPIAR ESTE TRECHO
            Dim regBO As New registroBO
            Dim registroVOTemp As New registroVO
            Dim novoRegistro As Integer = 0
            registroVOTemp = regBO.getRegistroSimplificado(ucPreambulo.getNumeroLaudo, ucPreambulo.getAno)

            If registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO And ucPreambulo.ehNovo Then
                novoRegistro = regBO.getUltimoRegistro
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi inserido na base de dados por outro usuário logado no sistema. O laudo será gerado com o número " & novoRegistro)
                ucPreambulo.getNumeroLaudo = novoRegistro

            ElseIf registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO Then
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi atualizado na base de dados por outro usuário logado no sistema.")
                Exit Sub
            End If

            'FIM DO TRECHO

            If (generica.validaCampos(ucPreambulo)) Then
                limpaErroControles()
                If gridMunicao.Rows.Count = 0 Then
                    MsgBox("Adicione pelo menos uma munição na lista dos exames")
                Else
                    exibeInvolucro(True)
                End If
            End If

        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub exibeInvolucro(ByVal exibe As Boolean)
        Try
            pnlInvolucro.Visible = exibe
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoVisualizaWord(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickVisualizaWord
        Try

            If registroGlobal.registroPincipal.NUM_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                generica.visualizaWord("", "", registroGlobal.registroPincipal.NOME_DIRETORIO)
            Else
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoNovoLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickNovoLaudo
        Try
            ucPreambulo.limparCampos()
            limpaCampos()
            ucPreambulo.populaDados()
            habilita(True, False, False, False)
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    Public Sub chamaEventoBuscaLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickBuscaLaudo
        Try

            Dim itens_avaliacaoBO As New itens_avaliacaoBO
            limpaCampos()
            ucPreambulo.getIdNatureza = _id_natureza
            ucPreambulo.buscaDadosLaudo(ucPreambulo, Me.MdiParent)
            If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                habilita(False, , True, False)

            Else
                habilita(True, False, False, False)
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    'Private Sub txtqtdeMunicao_ValueChanged(sender As Object, e As EventArgs) Handles txtqtdeMunicao.ValueChanged
    '    Dim estado As Boolean = Nothing
    '    If txtqtdeMunicao.Value > 1 Then
    '        estado = True
    '    Else
    '        estado = False

    '    End If
    '    grpRestante.Visible = estado
    '    grpRestante.Enabled = estado
    'End Sub

    Private Sub txtInvolucro_KeyPress(sender As Object, e As KeyPressEventArgs)
        If Not (Char.IsNumber(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
    End Sub

    'Private Sub cmbDevolucao_SelectedIndexChanged(sender As Object, e As EventArgs)
    '    If cmbDevolucao.Text.Equals("invólucro de segurança") Then
    '        lblInvolucro.Visible = True
    '        txtInvolucro.Visible = True
    '    Else
    '        lblInvolucro.Visible = False
    '        txtInvolucro.Visible = False
    '    End If
    'End Sub

    'Private Sub rdDevolveSim_CheckedChanged(sender As Object, e As EventArgs)
    '    If rdDevolveSim.Checked Then
    '        pnlDevolucao.Visible = True
    '    Else
    '        pnlDevolucao.Visible = False
    '    End If
    'End Sub

    'Private Sub cmbDevolucao_SelectedIndexChanged_1(sender As Object, e As EventArgs)
    '    If cmbDevolucao.Text.Equals("invólucro de segurança") Then
    '        txtInvolucro.Visible = True
    '    Else
    '        txtInvolucro.Visible = False
    '    End If

    '    If cmbDevolucao.SelectedIndex >= 0 Then
    '        erro.SetError(cmbDevolucao, String.Empty)
    '    End If
    'End Sub

    Private Sub btnAdicionar_Click(sender As Object, e As EventArgs) Handles btnAdicionar.Click
        Dim texto As New StringBuilder
        Dim material As String

        If validaMunicao() Then
            limpaErro()
            Try

                material = "MATERIAL" & generica.formataNumeroMaterial(gridMunicao.Rows.Count + 1) & ": "
                texto.Append(material).Append(generica.formataNumeroMaterial(txtqtdeMunicao.Value)).Append("(").Append(generica.getDecimal(txtqtdeMunicao.Value, True, False).ToUpper.Trim).Append(")")

                If txtqtdeMunicao.Value > 1 Then
                    If chkIntacta.Checked Then
                        texto.Append(" munições fabricante ").Append(ucFabricanteMunicao.DESCFABRICANTE).Append(", calibre ").Append(ucCalibreMunicao.DESC_CALIBRE).Append(", intactas e não deflagradas.")
                    ElseIf chkPercutida.Checked Then
                        texto.Append(" munições fabricante ").Append(ucFabricanteMunicao.DESCFABRICANTE).Append(", calibre ").Append(ucCalibreMunicao.DESC_CALIBRE).Append(", percutidas e não deflagradas.")
                    ElseIf chkDeflagrada.Checked Then
                        texto.Append(" munições fabricante ").Append(ucFabricanteMunicao.DESCFABRICANTE).Append(", calibre ").Append(ucCalibreMunicao.DESC_CALIBRE).Append(", percutidas e deflagradas.")
                    End If
                Else

                    If chkIntacta.Checked Then
                        texto.Append(" munição fabricante ").Append(ucFabricanteMunicao.DESCFABRICANTE).Append(", calibre ").Append(ucCalibreMunicao.DESC_CALIBRE).Append(", intacta e não deflagrada.")
                    ElseIf chkPercutida.Checked Then
                        texto.Append(" munição fabricante ").Append(ucFabricanteMunicao.DESCFABRICANTE).Append(", calibre ").Append(ucCalibreMunicao.DESC_CALIBRE).Append(", percutida e não deflagrada.")
                    ElseIf chkDeflagrada.Checked Then
                        texto.Append(" munição fabricante ").Append(ucFabricanteMunicao.DESCFABRICANTE).Append(", calibre ").Append(ucCalibreMunicao.DESC_CALIBRE).Append(", percutida e deflagrada.")
                    End If


                End If

                If rdEficienteSim.Checked Then
                    If chkDeflagrada.Checked Then
                        MsgBox("Uma munição percutida e deflagrada não pode ser eficiente. A caixa de seleção será mudada automaticamente para ineficiente.")
                        rdEficienteNao.Checked = True
                        Exit Sub
                    End If
                    If txtqtdeMunicao.Value > 1 Then
                        gridMunicao.Rows.Add(texto.ToString, material & "As munições enviadas a exames foram percutidas, verificando o examinador que as mesmas foram eficientes e capazes de deflagrar o projétil.")
                    Else
                        gridMunicao.Rows.Add(texto.ToString, material & "A munição enviada a exames foi percutida, verificando o examinador que a mesma foi eficiente e capaz de deflagrar o projétil.")
                    End If

                Else

                    If chkIntacta.Checked Or chkPercutida.Checked Then
                        If txtqtdeMunicao.Value > 1 Then
                            gridMunicao.Rows.Add(texto.ToString, material & "As munições enviadas a exames foram percutidas, verificando o examinador que as mesmas não foram eficientes e capazes de deflagrar o projétil.", chkIntacta.Checked)
                        Else
                            gridMunicao.Rows.Add(texto.ToString, material & "A munição enviada a exames foi percutida, verificando o examinador que a mesma foi não eficiente e capaz de deflagrar o projétil.", chkIntacta.Checked)
                        End If

                    Else
                        If txtqtdeMunicao.Value > 1 Then
                            gridMunicao.Rows.Add(texto.ToString, material & "As munições encaminhadas a exames não puderam ser submetidas ao exame de eficiência, pois já se encontravam percutidas e deflagradas.", chkIntacta.Checked)
                        Else
                            gridMunicao.Rows.Add(texto.ToString, material & "A munição encaminhada a exames não pode ser submetida ao exame de eficiência, pois já se encontrava percutida e deflagrada.", chkIntacta.Checked)
                        End If
                    End If
                End If


                limpaMunicao()

            Catch ex As Exception
                generica.gravaErro(ex)
            End Try
        End If

    End Sub

    Private Sub limpaErro()
        erro.SetError(ucCalibreMunicao, String.Empty)
        erro.SetError(ucFabricanteMunicao, String.Empty)
    End Sub

    Private Function validaMunicao() As Boolean
        If ucFabricanteMunicao.getIdFabricante = 0 Then

            erro.SetError(ucFabricanteMunicao, "Campo obrigatório")
            Return False
        Else
            erro.SetError(ucFabricanteMunicao, String.Empty)
            If ucCalibreMunicao.cmbCalibre.SelectedIndex = -1 Then
                erro.SetError(ucCalibreMunicao, "Campo obrigatório")
                Return False
            Else
                Return True
            End If
        End If
    End Function

    Private Sub limpaMunicao()
        txtqtdeMunicao.Value = 1
        ucFabricanteMunicao.cmbFabricante.SelectedIndex = -1
        ucCalibreMunicao.cmbCalibre.SelectedIndex = -1
        rdEficienteSim.Checked = True


    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        pnlInvolucro.Visible = False
        habilitaPainelInferior(True)
    End Sub

    Private Sub habilitaPainelInferior(ByVal habilita As Boolean)
        pnlItens.Enabled = habilita
    End Sub

    Private Sub cmbInvolucro_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbInvolucro.SelectedIndexChanged
        If cmbInvolucro.Text.Equals("invólucro de segurança") Then
            txtInvolucroIC.Visible = True
            lbIc.Visible = True
        Else
            txtInvolucroIC.Visible = False
            lbIc.Visible = False
        End If
    End Sub

    Private Sub cmdOk_Click(sender As Object, e As EventArgs) Handles cmdOk.Click
        limpaErroControles()
        exibeInvolucro(False)
        pb.Visible = True
        generica.salvaPreambulo(ucPreambulo)
        geraLaudo()
        If erroNivel > 0 Then

            If generica.rollBack(registroGlobal.registroPincipal, nomeDiretorio, erroNivel, ucPreambulo.ehNovo, ucPreambulo) Then
                MsgBox("O sistema recuperou de um erro grave e nenhuma informação foi gravada. Para registrar um novo laudo, clique em novo laudo")
                erroNivel = 0
                ucPreambulo.btnLimpaCampos.PerformClick()
                limpaCampos()
            End If

        Else
            ucPreambulo.txtDataEntrada.Enabled = False
            limpaMunicao()
            limpaErroControles()
            limpaCampos()
            habilita(False, False, True, False)
        End If
    End Sub

    Private Function validaInvolucro() As Boolean

        Dim isOk As Boolean = False
        Try
            If cmbInvolucro.Text.Equals(String.Empty) Then
                erro.SetError(cmbInvolucro, "Campo obrigatório")
                Return False
            End If

            If cmbInvolucro.Text.Equals("invólucro de segurança") Then
                If txtInvolucroIC.Text.Equals(String.Empty) Then
                    erro.SetError(txtInvolucroIC, "Campo obrigatório")
                    Return False
                Else
                    erro.SetError(txtInvolucroIC, String.Empty)
                End If
            Else
                erro.SetError(cmbInvolucro, String.Empty)
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
        Return True
    End Function

    Private Sub gridMunicao_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles gridMunicao.CellContentClick
        gridMunicao.Rows.RemoveAt(e.RowIndex)
    End Sub

    'Private Sub rdEficienteNao_CheckedChanged(sender As Object, e As EventArgs) Handles rdEficienteNao.CheckedChanged

    '    If rdEficienteNao.Checked Then
    '        chkIntacta.Enabled = False
    '        chkIntacta.Checked = False

    '    Else
    '        chkIntacta.Enabled = True
    '        chkIntacta.Checked = True
    '    End If
    'End Sub

    'Private Sub rdEficienteSim_CheckedChanged(sender As Object, e As EventArgs) Handles rdEficienteSim.CheckedChanged

    '    If rdEficienteSim.Checked Then
    '        chkIntacta.Enabled = True
    '        chkIntacta.Checked = True
    '    Else
    '        chkIntacta.Enabled = False
    '        chkIntacta.Checked = False
    '    End If
    'End Sub

    'Private Sub chkIntacta_CheckedChanged(sender As Object, e As EventArgs) Handles chkIntacta.CheckedChanged
    '    If chkIntacta.Checked Then
    '        rdEficienteNao.Checked = True
    '        rdEficienteSim.Checked = False
    '    Else
    '        rdEficienteNao.Checked = False
    '        rdEficienteSim.Checked = True
    '    End If
    'End Sub

    'Private Sub rdEficienteSim_CheckedChanged(sender As Object, e As EventArgs) Handles rdEficienteSim.CheckedChanged

    '    If rdEficienteSim.Checked Then
    '        chkIntacta.Checked = True
    '    End If
    'End Sub
End Class